package br.org.eda.wj.pdfinder.logica;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;

import br.org.eda.wj.pdfinder.interfaces.ManipuladorDeTextosIF;
import br.org.eda.wj.pdfinder.objetos.TextoPDF;

public class ManipuladorDeTextos implements ManipuladorDeTextosIF {

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.org.eda.wj.pdfinder.logica.ManipuladorDeTextosIF#buscador()
	 */

	@Override
	public String buscador() {

		int selecao;
		JFileChooser seletor = new JFileChooser();
		seletor.setDialogTitle("Selecione  uma Pasta");
		seletor.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		selecao = seletor.showOpenDialog(null);

		if (selecao == JFileChooser.APPROVE_OPTION) {
			String caminhoEscolhido = seletor.getSelectedFile()
					.getAbsolutePath().toString();
			JOptionPane.showMessageDialog(null, caminhoEscolhido);
			return caminhoEscolhido;
		} else {
			return null;
		}

	}

	@Override
	public String[] listaDePDF(String caminho) {
		File pasta = new File(caminho);
		if (pasta.isDirectory()) {
			File[] arquivosNaPasta = pasta.listFiles();
			ArrayList<String> nomesPDFs = new ArrayList<String>();
			for (int i = 0; i < arquivosNaPasta.length; i++) {
				String nomeDoArquivo = arquivosNaPasta[i].getName();
				if (nomeDoArquivo.endsWith(".pdf")) {
					nomesPDFs.add(arquivosNaPasta[i].getAbsolutePath());
				}
			}

			String[] listaDePDFs = new String[nomesPDFs.size()];

			for (int i = 0; i < nomesPDFs.size(); i++) {
				listaDePDFs[i] = nomesPDFs.get(i);
			}

			return listaDePDFs;
		} else {
			return null;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.org.eda.wj.pdfinder.logica.ManipuladorDeTextosIF#extraiTextoDoPDF(
	 * java.lang.String)
	 */
	@Override
	public ArrayList<TextoPDF> extraiTextoDoPDF(String caminho) {

		PDDocument pdfDocument = null;
		ArrayList<TextoPDF> textosQuebrados = new ArrayList<TextoPDF>();
		String[] pdfs = listaDePDF(caminho);

		for (int i = 0; i < pdfs.length; i++) {

			try {
				pdfDocument = PDDocument.load(pdfs[i]);
				PDFTextStripper stripper = new PDFTextStripper();
				String texto = stripper.getText(pdfDocument).toLowerCase();
				// System.out.println("TEXTO RETIRADO DO ARQUIVO: " + texto); //
				// imprime o texto retirado do arquivo PDF com todas as palavras
				// minusculas

				textosQuebrados.add(new TextoPDF(pdfs[i], texto));

			} catch (IOException e) {
				throw new RuntimeException(e);
			} finally {
				if (pdfDocument != null)
					try {
						pdfDocument.close();
					} catch (IOException e) {
						throw new RuntimeException(e);

					}

			}
		}

		return textosQuebrados;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.org.eda.wj.pdfinder.logica.ManipuladorDeTextosIF#separadorPalavras
	 * (java.lang.String)
	 */
	@Override
	public void separadorPalavras(TextoPDF textoPDF) {

		String texto = textoPDF.getTexto(); // a variavel TEXTO recebe o texto
		String[] textoSeparado = texto.split(" "); // variavel "textoSeparado"
		textoPDF.setTextoSeparado(textoSeparado); // recebe as palavras do
		// texto que estao separadas
		// por espacos

	}

}
